全部学科
Python全栈
python
NodeJS全栈
nodejs
📅 2026-05-21 5 分钟 ✍️ juanwangdev

Compose 网络与卷

Compose 中网络和卷是多容器通信与数据共享的基础,下面介绍配置方法。

网络配置

默认网络

YAML
services:
  web:
    image: nginx
  app:
    image: my-app

默认所有服务加入 default 网络,可互相访问。

自定义网络

YAML
version: '3.8'

services:
  web:
    image: nginx
    networks:
      - frontend
  
  app:
    image: my-app
    networks:
      - frontend
      - backend
  
  db:
    image: postgres
    networks:
      - backend  # 仅 app 可访问 db

networks:
  frontend:
  backend:

网络驱动

YAML
networks:
  frontend:
    driver: bridge  # 默认
  
  overlay-net:
    driver: overlay  # Swarm 跨主机

网络别名

YAML
services:
  db:
    image: postgres
    networks:
      backend:
        aliases:
          - database
          - postgres-db

# app 可通过 database、postgres-db 访问

数据卷配置

命名卷

YAML
version: '3.8'

services:
  db:
    image: postgres
    volumes:
      - db-data:/var/lib/postgresql/data

volumes:
  db-data:
    driver: local

外部卷

YAML
volumes:
  db-data:
    external: true  # 使用已存在的卷

卷驱动选项

YAML
volumes:
  cache-data:
    driver: local
    driver_opts:
      type: tmpfs
      device: tmpfs
      o: size=100m

完整示例

YAML
version: '3.8'

services:
  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
    networks:
      - frontend
    volumes:
      - nginx-config:/etc/nginx/conf.d:ro

  app:
    build: .
    networks:
      - frontend
      - backend
    volumes:
      - app-data:/app/data
    depends_on:
      - db
      - redis

  db:
    image: postgres:15
    networks:
      - backend
    volumes:
      - db-data:/var/lib/postgresql/data

  redis:
    image: redis:7
    networks:
      - backend
    volumes:
      - redis-data:/data

networks:
  frontend:
    driver: bridge
  backend:
    driver: bridge
    internal: true  # 禁止外部访问

volumes:
  nginx-config:
  app-data:
  db-data:
  redis-data:

网络隔离

YAML
networks:
  backend:
    internal: true  # 无外网访问
  frontend:
    # 可访问外网

internal: true 阻止网络访问外部,仅允许内部通信。

查看网络与卷

Bash
# 查看网络
docker compose config --networks

# 查看卷
docker compose config --volumes

# 查看容器网络
docker inspect my-app-web-1 | grep -A 10 "Networks"

要点总结

  • 默认所有服务加入同一网络可互相访问
  • 自定义网络实现服务隔离,仅同一网络服务可通信
  • 网络别名提供服务发现别名,提高配置灵活性
  • 命名卷实现数据持久化,外部卷使用已有数据
  • internal: true 阻止网络访问外部,增强安全性
想在手机上练习这篇文章的配套题目?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一篇 环境变量与配置文件
下一篇 → 扩缩容与负载均衡
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码